package com.mall.db.utils;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class AutoMybatisPlus {

    public static void main(String[] args) {
        System.out.println("-----------开始执行mybatis的自动生成----------");
        createGenerator();
        System.out.println("-----------mybatis的自动生成执行完成----------");
    }

    //代码构造器
    public static void createGenerator(){
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(globalConfig());
        ag.setDataSource(dataSourceConfig());
        ag.setPackageInfo(packageConfig());
        ag.setTemplate(templateConfig());
        ag.setStrategy(strategyConfig());
        ag.execute();
    }

    //做全局变量配置
    public static GlobalConfig globalConfig(){
        GlobalConfig gc = new GlobalConfig();

        //设置保存跟路径
        String rootPath = "E:/IdeaProjects/Java20210922/mall_db/src/main/java";//绝对路径
        gc.setOutputDir(rootPath);
        gc.setAuthor("HQJ");
        //设置文件同名是是否为覆盖
        gc.setFileOverride(false);
        //设置生成成功后是否要自动打开该文件
        gc.setOpen(false);
        //设置id的自动增长
        gc.setIdType(IdType.AUTO);
        //设置文件名称规则
        gc.setMapperName("%sDao");//dao接口名称
        gc.setServiceName("%sServiceI");//service 接口名称
        gc.setServiceImplName("%sService");//service 实现类名称
        gc.setControllerName("%sController");//controller 名称
        gc.setXmlName("%sMapper");
        gc.setEntityName("%s");
        return gc;
    }

    //配置数据源
    public static DataSourceConfig dataSourceConfig(){
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/littlemall?characterEncoding=utf-8&serverTimezone=Asia/Shanghai")
        .setUsername("root").setPassword("root")
        .setDriverName("com.mysql.cj.jdbc.Driver");
        return dsc;
    }

    //设置包路径
    public static PackageConfig packageConfig(){
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.mall.db");
        pc.setController("controller");
        pc.setMapper("dao");
        pc.setService("service");
        pc.setServiceImpl("service");
        pc.setEntity("domain");
        return pc;
    }

    //设置生成模板
    public static TemplateConfig templateConfig(){
        TemplateConfig tc = new TemplateConfig();
        tc.setXml(null);//说明不需要生成xml文件
        tc.setService(null);
        tc.setController(null);
        return tc;
    }

    //调用数据库
    public static StrategyConfig strategyConfig(){
        StrategyConfig sc = new StrategyConfig();
        //查询的表
        sc.setInclude("t_courier");
        //设置表名与实体名称的映射关系
        sc.setNaming(NamingStrategy.underline_to_camel);
        //设置表列明与实体属性名称的映射关系
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        //设置实体是否加入lombok
        sc.setEntityLombokModel(true);
        //controller是否为rest风格
        sc.setRestControllerStyle(false);
        //设置表的前缀
        sc.setTablePrefix("t_");
        return sc;
    }
}
